看雪.WiFi万能钥匙 CTF 2017第八题 点评及解题思路
看雪CTF 2017 比赛进行至第八题
截止至今天中午12点,第八题破解人数为5人!
攻击方排名前十名波动不大,
loudy从第十位上升至第7位,
poyoten再次冲进前十位~
前十名能否保守住自己的位置呢?
是否会有黑马一战成名呢?
期待ing......
接下来我们来回顾一下第八题
看看 看雪评委和出题者是怎么说的ヾ(๑╹◡╹)ノ"。
看雪评委 netwind 点评
该题亮点依然在反调试上,用虚拟机进行代码保护,通过线程动态加解密主要代码,通过校验和检查代码完整性,根据时间来反调试,另外还将实际代码替换为假代码,防止反汇编,在反调试方面让攻方选手举步维艰。算法上采用了RSA算法的思想,解决掉反调试后,参考RSA算法可以求解。
作者简介
作者loudy,原名吴林峰,毕业于北京航空航天大学电子信息工程专业,当前从事工作出于保密规定暂不公开。爱好跑步、篮球、电影;热衷编程、特别是逆向分析。2007年接触看雪,以潜水学习为主,也希望多认识有相同爱好的朋友。
看雪 CTF2017 第八题设计思路
一、答案
UFdVXVRTVVFYWltdXV9XQkFDQEUtLVBTV1BWVVFQUVxeWVxfWENDQkRCQE5CTEBCWFZaVVRTVlxZU1lcXC0tVGhpNV9pc19BX1ZlcnlfU2ltcGxlX1Rlc3Qh
二、基本设计思想
(1)简单虚拟机(使用虚拟寄存器传值)
实现了系统函数调用、CMP、JNZ、XOR等调用
(2)反调试
主要使用了3种
1、 线程动态加密解密主要代码
2、 CheckSum检查主要代码
3、 时间判断
(3)反汇编
主要通过将实际代码替换为假代码,防止反汇编。
(4)算法设计
主要是利用RSA思想,其中(比较小)
P:900F0CA3041C345B
Q:98FCAE63A170C363
N:56172073862A662A8D6BB1A135999031
E:D9C382944A461EE3
D:4A064A97921BDF9E3F354E9020AE054F
首先对输入进行base64解码,然后将解码后注册码分成三段,
1、 第一段解码得到E,再和固定值做大数乘法运算,结果和另一固定值比较,相等则到下一步
2、 第二段解码得到N,再和固定值做大数乘法运算,结果和另一固定值比较,相等则到下一步
3、 通过E和N对第三段加密,和内存固定值比较,相等则成功
三、破解思路
1、先解决反调试和反反汇编,将真正代码还原
2、识别大数乘法运算,通过固定值和大数除法还原E、N,得到第一段和第二段注册码。
3、通过E、N解出D
4、用N和D对固定值解密,得到第三段注册码。
5、组合三段注册码,base64加密,得到最终的注册码。
下面选取攻击者 风间仁 的破解分析
创建了6个线程, 前3个线程是负责smc解码的, 后3个线程没用
线程1:解码 004025DC 处的跳转及 check1 函数
线程2:解码 0040263C 处的跳转及 check2 函数
线程3:解码 0040269C 处的跳转及 check3 函数
一个自定义的虚拟机
校验函数
检测代码改动
sn=base64_decode(sn)
sn的格式(共90位): (20位)--(39位)--(27位)
校验前20位
(sn1 xor abcdefg...) * 98765432109876543210123 == 1549780652036258484424751705102781884386113
校验中间39位
(sn2 xor abcdefg...) ^ 2 == 13095069099216326605010245808779535277211541324456558063162414338128147458401
检验后27位, sn3视为16进制
sn3 ^ 15691529100101820131 mod 114433688655117320765854989491151409201 == 71639176673360967005214790689576394595
sn3作为16进制转换的时候是有符号转换的, 所以导致>=80的值无法正常转换
这里只需要关心能产生0x00的值即可(有挺多个, 如0x89)
已知:
e = 15691529100101820131
n = 114433688655117320765854989491151409201
m = 71639176673360967005214790689576394595
分解得到:
d = 98395538376216701876091105738065053007
c = m ^ d mod n = 55986991232018409201158808992848352475 (2A1EB3C9579DFA307CF5B6C8730114DB)
c中>=0x80的是无法通过转换得到的(如B3, C9, ...)
sn3(27字节) > c (16字节)
c ^ e mod n = m
(c + k * n) ^ e mod n = m
根据下面这两个条件可以立刻得到很多解(如: 0208674855670d0560353c3a1d3e242e217766)
sn3 = c + k * n
sn3中的字节必须小于0x80
得到的解, 在前面填充可以转换成00的值:89898989898989890208674855670d0560353c3a1d3e242e217766
与前面的串连接起来base64得到最终结果
UFdVXVRTVVFYWltdXV9XQkFDQEUtLVBTV1BWVVFQUVxeWVxfWENDQkRCQE5CTEBCWFZaVVRTVlxZU1lcXC0tiYmJiYmJiYkCCGdIVWcNBWA1PDodPiQuIXdm
最后感谢 WiFi 万能钥匙安全应急响应中心的赞助支持,
接下来的比赛大家一定要使出洪荒之力哦!↖(^ω^)↗
比心 ❤
上海连尚网络科技有限公司成立于 2013 年,是一家专注于提供免费上网和内容服务的移动互联网企业。连尚网络自主研发的核心产品 WiFi 万能钥匙,以分享经济的模式,通过云计算和大数据技术,利用热点主人分享的闲置WiFi资源,为用户提供免费、稳定、安全的上网服务,以帮助更多的人上网,找到属于他们的机会,改变自己的命运。
往期热门内容推荐
更多比赛详情,长按下方二维码,“关注看雪学院公众号”查看!
看雪论坛:http://bbs.pediy.com/
微信公众号 ID:ikanxue
微博:看雪安全
商务合作:wsc@kanxue.com
点
了解更多